package com.icinfo.cloud.provider.punish.ucase.casemain.dto;

import cn.hutool.core.util.ObjectUtil;
import com.icinfo.cloud.common.core.page.BasePageRequest;
import com.icinfo.cloud.provider.common.utils.BaseUtil;
import com.icinfo.cloud.provider.punish.ucase.casemain.enums.PartyTypeEnum;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author yehuafei
 * @date 2022/12/5 14:56
 */
@Data
public class CaseInfoPageRequest extends BasePageRequest implements Serializable {
    /**
     * 查询类别 : 0.待办案件，1.办结案件 ,2全部
     **/
    @NotBlank(message = "查询类别不能为空")
    private String selectType;
    /**
     * 时效 red 办案期限超期（红色）、yellow 办案期限剩余天数≤ 3天（黄色）、blue 办案期限剩余天数＞3天（蓝色） all 全部
     **/
    private String timeColor;
    /**
     * 案件编号
     **/
    private String caseNumber;
    /**
     * 案件来源 字典项：01-在行政检查中发现 02-机构检测报告 03-社会举报 04-上级行政机关交办 05-下级行政机构报请 06-有关部门移送 07-非现场执法 08-巡查发现'
     **/
    private String caseSource;
    /**
     * 案件阶段编码
     */
    private String caseStageCode;
    /**
     * 处罚事项
     **/
    private String punishName;
    /**
     * 处罚决定书文号
     */
    private String documentNumber;
    /**
     * 处罚结论: 1 予以处罚, 2 不予处罚
     */
    private String punishConclusion;
    /**
     * 案件类型 1简易程序  2一般程序
     */
    private String caseType;
    /**
     * 案发地点
     */
    private String casePlace;
    /**
     * 案件状态 1-办案中
     */
    private String caseStatus;

    // 以下为当事人条件
    /**
     * 当事人类型 01-公民 02-法人 03-其他组织 04-个体工商户'
     */
    private String partyNameType;
    /**
     * 当事人姓名
     **/
    private String partyName;
    /**
     * 当事人证件编号
     **/
    private String partyCardCode;

    //以下为承办人条件
    /**
     * 承办人姓名
     */
    private String handleName;
    /**
     * 当事人证件编号
     **/
    private String handleCardCode;

    /**
     * 立案日期开始时间
     */
    private String caseRegistTimeStart;
    /**
     * 立案日期结束时间
     */
    private String caseRegistTimeEnd;
    /**
     * 处罚决定作出日期开始时间
     */
    private String punishDecisionTimeStart;
    /**
     * 处罚决定作出日期结束时间
     */
    private String punishDecisionTimeEnd;
    /**
     * 结案时间--开始
     **/
    private String caseEndTimeStart;
    /**
     * 结案时间---结束
     **/
    private String caseEndTimeEnd;

    //以下为处罚内容条件
    /**
     * 处罚种类 多个之间','隔开  01-警告 02-罚款 03-没收违法所得 04-责令停产停业 05-暂扣或吊销许可证 06-行政拘留 07-法律、行政法规规定的其他行政处罚 99-其他
     */
    private List<String> punishKinds;
    /**
     * 处罚金额开始
     */
    private Float punishMoneyStart;
    /**
     * 处罚金额结束
     */
    private Float punishMoneyEnd;
    /**
     * 没收违法所得金额开始
     */
    private Float confiscateIllegalMoneyStart;
    /**
     * 没收违法所得金额结束
     */
    private Float confiscateIllegalMoneyEnd;
    /**
     * 没收非法财务金额开始
     */
    private Float confiscateIllegalPropertyStart;
    /**
     * 没收非法财务金额结束
     */
    private Float confiscateIllegalPropertyEnd;
    /**
     * 拘留天数开始
     */
    private String detainDayStart;
    /**
     * 拘留天数结束
     */
    private String detainDayEnd;

    //以下为案件属性条件
    /**
     * 执行方式 自觉履行、强制执行
     */
    private String punishType;
    /**
     * 是否重大案件(0-否/1-是)
     */
    private String isImportantCase;
    /**
     * 是否为联合法制审核（0-否/1-是）
     */
    private String isCaseApprovalCenter;
    /**
     * 是否集体议案(0-否/1-是)
     */
    private String isNeedCollectiveDiscuss;
    /**
     * 是否可听证；(0-否/1-是)
     */
    private String isHearing;
    /**
     * 是否公示 0不，1.公示
     */
    private String isPublicity;
    /**
     * 是否涉刑职权(0-否/1-是)
     */
    private String isAuthorityCase;
    /**
     * 常规条线90天时效--开始
     **/
    private Timestamp time90LimitStart;
    /**
     * 常规条线90天时效---结束
     **/
    private Timestamp time90LimitEnd;
    /**
     * 人社条线60天时效--开始
     **/
    private Timestamp time60LimitStart;
    /**
     * 人社条线60天时效---结束
     **/
    private Timestamp time60LimitEnd;
    /**
     * 应急条线30天时效--开始
     **/
    private Timestamp time30LimitStart;
    /**
     * 应急条线30天时效---结束
     **/
    private Timestamp time30LimitEnd;
    /**
     * 部门机构判断--不用传
     **/
    private Integer org;
    /**
     * 机构编码
     **/
    private String orgCode;
    /**
     * 机构编码列表--不用传
     **/
    private List orgCodeList;
    /**
     * 部门编码列表--不用传
     **/
    private List deptCodeList;
    /**
     * 程序类型：正常程序和快办 分别对应 2、 3
     */
    private String procedureType;

    public void checkTimeColor() {
        //分红（当前日期-办案期限<0)、黄(当前日期-办案期限<=3)、蓝色(当前日期-办案期限>3)
        // 红橙黄绿蓝
        if (StringUtils.isEmpty(this.getTimeColor())) {
            return;
        }
        if ("red".equals(this.getTimeColor())) {
//            this.setTimeLimitStart(Timestamp.valueOf("1999-01-01 00:00:00"));
//            this.setTimeLimitEnd(BaseUtil.getNowTimeStamp());
        } else if ("yellow".equals(this.getTimeColor())) {
//            this.setTimeLimitStart(BaseUtil.getNowTimeStamp());
//            this.setTimeLimitEnd(BaseUtil.getTimeStampAfterDateByDays(BaseUtil.getTodayEndDate(), 7));
        } else if ("blue".equals(this.getTimeColor())) {
//            this.setTimeLimitStart(BaseUtil.getTimeStampAfterDateByDays(BaseUtil.getTodayStartDate(), 7));
//            this.setTimeLimitEnd(null);
        }
    }

    public void checkOrgCode() {
        this.setOrg(0);
        if (StringUtils.isEmpty(this.getOrgCode())) {
            return;
        }
        List<String> orgCodeList = new ArrayList<>();
        List<String> deptCodeList = new ArrayList<>();
        String[] str = this.getOrgCode().split(",");

        for (String s : str) {
            if(s.indexOf("_")>0){
                orgCodeList.add(s);
            }else {
                deptCodeList.add(s);
            }
        }
        if(orgCodeList.size()>0&&deptCodeList.size()>0){
            this.setOrg(1);
        }else if(orgCodeList.size()>0){
            this.setOrg(2);
        }else if(deptCodeList.size()>0){
            this.setOrg(3);
        }

        this.setOrgCodeList(orgCodeList);
        this.setDeptCodeList(deptCodeList);
    }
}
